<script>
    /*let a = {}
b = '0'
c=0
a[b] = '珠峰'
a[c] = '培训'
// 对象的key数字和字符串等效
console.log('res',a[b]) // '培训'*/

    /*let a = {}
    b = Symbol('1')
    c = Symbol('1')
    a[b] = '珠峰'
    a[c] = '培训'
    console.log(a[b]) // '珠峰' Symbol的特点,都是唯一的*/

    /*let test = (function (i){
        return function (){
            alert(i*=2)
        }
    })(2)

    test(5) // 输出"4",因为是alert*/


    /*
    // 全局变量a
    var a = 0
    // 全局变量b
    b = 0
    function A(a){
        // 重写了全局的方法A
        A = function (b){
            console.log(a + b++)
        }
        console.log(a++)
    }
    A(1) // 1 第一次调用A
    A(2) // 4 第二次调用A 被重写了A的指向
    */

    function Foo() {
        // 在函数体里面没有用var声明的都是全局变量
        getName = function () {
            console.log(1)
        }
        return this // window
    }

    Foo.getName = function () {
        console.log(2)
    }
    Foo.prototype.getName = function () {
        console.log(3)
    }

    // 有var变量声明不赋值,function是声明并赋值
    var getName = function () {
        console.log(4)
    }

    function getName() {
        console.log(5)
    }

    Foo.getName() // 2
    getName() // 4
    Foo().getName()//1
    new Foo.getName()// 2 先算Foo.getName(),再算new,相当于new function(){}
    new Foo().getName() // 3 new Foo()得到实例,然后实例.方法就是在原型上找
    new new Foo().getName() // 3 也是找原型上的方法


</script>
